package com.itbaizhan.mapper;

import com.itbaizhan.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

public interface UserMapper {



    /*分页查询
    @Param传参
在接口方法的参数列表中通过@Param定义参数名称，
在Sql语句中通过注解中所定义的参数名称指定参数位置。
在映射文件中，把Param括号中的名称放进#{}中
此方式参数比较直观的，推荐使用*/
    List<User> findPage(@Param("startIndex") int startIndex,@Param("pageSize") int pageSize);


    /*分页查询
     * 使用Map作为传递参数的载体，在SQL语句中绑定参数时使用Map的Key
     * 作为参数名即可。此方法推荐使用。
     * 在MyBatis中使用Map传参，Map键的类型为 String*/

    List<User> findPage1(Map<String,Object> Params);

    /*主键回填
     * 有时我们需要获取新插入数据的主键值。如果数据库中主键是自增的，
     * 这时我们就需要使用MyBatis的主键回填功能。*/
    void add2(User user);

    //多条件查询  where标签 可以代替sql中的where 1=1 和第一个and
    List<User> findByCondition(User user);

    /*用set标签*/
    void updateUser(User user);
    //动态SQL_<choose>、<when>、<otherwise>
    List<User> findByName(String name);

    //测试<foreach> 遍历数组 批量删除
    //collection：遍历的对象类型
    //open：开始的sql语句
    //close：结束的sql语句
    //separator：遍历每项间的分隔符
    //item：表示本次遍历获取的元素，遍历List、Set、数组时表示每项元素。遍历map时表示键值对的值 (value)。
    //index：遍历List、数组时表示遍历的索引。遍历map时表示键值对的键(key)。（index="key"  item="value"）
    //遍历数组
    //根据id删除用户  数组
    //delete from user where id in(2,3,4);
    void deleteById(int[] ids);


     /*批量新增
    遍历Collection(集合)
    * <foreach> 遍历list和set的方法是一样的
    * insert into user(username,sex,address) values(username1,sex1,address1),(username2,sex2,address2),(username3,sex3,address3)*/
    void add(List<User> users);


    /*多条件查询  例如：价格范围 品牌 年龄 .....
     * 查询条件键值对  键：属性名   值：属性值
     * select * from where username = ? and sex = ? .....*/
    //这里的map 要起一个传参名 在映射文件中的 collection标签 不可以写map 要用传参名
    List<User> findUser(@Param("queryMap") Map<String,Object> map);
}
